home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / MYMUD21.ZIP / MMUD21.ZIP / SOURCE / 11_STUFF.ZIP / ML_IO.ZIP / FOREIGN.PAS < prev    next >
Pascal/Delphi Source File  |  1993-07-05  |  4KB  |  157 lines

  1. Unit Foreign;
  2. Interface
  3. Uses Dos,
  4.      Crt;
  5.  
  6. Procedure ReadKeyBoardDefinition(FileName : ComStr);
  7. Procedure SaveDefinition(FileName : ComStr);
  8. Function  ReadDefinition(FileName : ComStr):Boolean;
  9. Procedure ForeignKeys(Var Key : Char);
  10. Procedure ClearKeyBoardDef;
  11.  
  12. Var UseForeign : Boolean;
  13.  
  14. Implementation
  15.  
  16. Const indentifier = 'LiveSystems keyboard definition file v1.0'#26;
  17.  
  18. Type KeyBoardType = Array[#00..#128] of Char;
  19. Type KeyBoardDef  = Record
  20.                       Mine       : String[45];
  21.                       Keyboard   : KeyBoardType;
  22.                       DeadKeys   : String;
  23.                       Specials   : String;
  24.                     End;
  25.  
  26. Var KeyBoard   : KeyBoardDef;
  27.  
  28.  
  29. Procedure EatSpaces(Var Line : String);
  30. Begin
  31. While (Line<>'') And (Line[1]=' ') Do
  32.  Delete(Line,1,1);
  33. End;
  34.  
  35. Procedure StripExtention(Var FileName : ComStr);
  36. Var Path : PathStr;
  37.     Name : String[8];
  38.     Dum  : String[4];
  39. Begin
  40. FSplit(FileName,Path,Name,Dum);
  41. FileName:=Path+Name;
  42. End;
  43.  
  44. Procedure ClearKeyBoardDef;
  45. Begin
  46. FillChar(KeyBoard,SizeOf(KeyBoard),#00);
  47. End;
  48.  
  49. Procedure ReadKeyBoardDefinition(FileName : ComStr);
  50. Var Counter : Char;
  51.     Def     : Text;
  52.     Line    : String;
  53. Begin
  54.  
  55. StripExtention(FileName);
  56. With KeyBoard Do
  57.  Begin
  58.  For Counter:=#00 To #128 Do
  59.   KeyBoard[Counter]:=Counter;
  60.  DeadKeys:='';
  61.  Specials:='';
  62.  Mine:=Indentifier;
  63.  
  64.  Assign(Def,FileName+'.DEF');
  65.  Reset(Def);
  66.  If IoResult<>0
  67.     Then Begin
  68.          WriteLn('Error: .DEF file not found!');
  69.          Exit;
  70.          End;
  71.  While Not Eof(Def) Do
  72.   Begin
  73.   FillChar(Line,SizeOf(Line),#32);
  74.   ReadLn(Def,Line);
  75.   If (Line<>'') And (Line[1]<>Line[2])
  76.      Then Begin
  77.           If Line[1] = '%'
  78.              Then Begin
  79.                   Delete(Line,1,1);
  80.                   If Pos(Line[1],DeadKeys)=0
  81.                      Then DeadKeys:=DeadKeys+Line[1];
  82.                   Specials:=Specials+Copy(Line,1,3);
  83.                   End
  84.              Else KeyBoard[Line[1]]:=Line[2];
  85.           End;
  86.   End;
  87.  Close(Def);
  88.  End; {With}
  89. End;
  90.  
  91. Procedure SaveDefinition(FileName : ComStr);
  92. Var Key : File of KeyboardDef;
  93. Begin
  94. StripExtention(FileName);
  95. Assign(Key,FileName+'.LKY');
  96. Rewrite(Key);
  97. If IoResult<>0
  98.    Then WriteLn('Error: Couldn''t write .LKY file!')
  99.    Else Begin
  100.         Write(Key,KeyBoard);
  101.         Close(Key);
  102.         End;
  103. If IoResult<>0
  104.    Then WriteLn('Error: Couldn''t write .LKY file!');
  105. End;
  106.  
  107. Function ReadDefinition(FileName : ComStr):Boolean;
  108. Var Key : File of KeyboardDef;
  109. Begin
  110. StripExtention(FileName);
  111.  
  112. ReadDefinition:=False;
  113. UseForeign:=False;
  114. Assign(Key,FileName+'.LKY');
  115. Reset(Key);
  116. If IoResult<>0
  117.    Then Exit
  118.    Else Begin
  119.         Read(Key,KeyBoard);
  120.         Close(Key);
  121.         End;
  122. If Keyboard.Mine<>Indentifier
  123.    Then Begin
  124.         FillChar(KeyBoard,SizeOf(KeyBoard),#00);
  125.         Exit;
  126.         End;
  127. ReadDefinition:=True;
  128. End;
  129.  
  130. Procedure ForeignKeys(Var Key : Char);
  131. Var Check : String[3];
  132.     Where : Byte;
  133. Begin
  134. With KeyBoard Do
  135.  Begin
  136.  If UseForeign and (Pos(Key,DeadKeys)=0)
  137.     Then Begin
  138.          Key:=Keyboard[Key];
  139.          Exit;
  140.          End;
  141.  
  142.  If UseForeign And (Pos(Key,DeadKeys)>0)
  143.     Then Begin
  144.          Write(Key+#8);
  145.          Check:=Key;
  146.          Key:=ReadKey;
  147.          Check:=Check+KeyBoard[Key];
  148.          Where:=Pos(Check,Specials);
  149.          If Where=0
  150.             Then Key:=Check[1]
  151.             Else Key:=Specials[Where+2];
  152.          Exit;
  153.          End;
  154.  End; {With}
  155. End;
  156.  
  157. End.